<?php

/**
 * Description of FrameworkCopyGuiUtility
 *
 * @author devansh.ramen
 */
class FrameworkCopyGuiUtility
{

    public static function smartCopy($source, $dest,
            $options = array('folderPermission' => 0777, 'filePermission' => 0777))
    {
        $result = false;

        if(is_file($source))
        {
            if($dest[strlen($dest) - 1] == '/')
            {
                if(!file_exists($dest))
                {
                    cmfcDirectory::makeAll($dest, $options['folderPermission'], true);
                }
                $__dest = $dest."/".basename($source);
            }
            else
            {
                $__dest = $dest;
            }
            $result = copy($source, $__dest);
            chmod($__dest, $options['filePermission']);
        }
        elseif(is_dir($source))
        {
            if($dest[strlen($dest) - 1] == '/')
            {
                if($source[strlen($source) - 1] == '/')
                {
                    //Copy only contents
                }
                else
                {
                    //Change parent itself and its contents
                    $dest = $dest.basename($source);
                    @mkdir($dest);
                    chmod($dest, $options['filePermission']);
                }
            }
            else
            {
                if($source[strlen($source) - 1] == '/')
                {
                    //Copy parent directory with new name and all its content
                    @mkdir($dest, $options['folderPermission']);
                    chmod($dest, $options['filePermission']);
                }
                else
                {
                    //Copy parent directory with new name and all its content
                    @mkdir($dest, $options['folderPermission']);
                    chmod($dest, $options['filePermission']);
                }
            }

            $dirHandle = opendir($source);

            while($file = readdir($dirHandle))
            {
                if($file != "." && $file != "..")
                {
                    if(!is_dir($source."/".$file))
                    {
                        $__dest = $dest."/".$file;
                    }
                    else
                    {
                        $__dest = $dest."/".$file;
                    }
                    //echo "$source/$file ||| $__dest<br />";
                    $result = FrameworkCopyGuiUtility::smartCopy($source."/".$file, $__dest, $options);
                }
            }

            closedir($dirHandle);
        }
        else
        {
            $result = false;
        }

        return $result;
    }

}

?>